/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.digitalpoint.dao;

import br.com.digitalpoint.Cargo;
import br.com.digitalpoint.Funcionario;
import br.com.digitalpoint.Perfil;
import br.com.digitalpoint.utils.FabricaConexao;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author Adriano
 */
public class FuncionarioDAO {
    public void incluirFuncionario(Funcionario func) throws Exception{
        try{
            String insere = "INSERT INTO TBFuncionarios (nome, data_nascimento, rg, cpf, endereco, cidade, bairro, telefone, email, senha, cod_cargo, cod_perfil) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(insere);
            ps.setString(1, func.getNome());
            ps.setDate(2, (Date) func.getDataNascimento());
            ps.setString(3, func.getRg());
            ps.setString(4, func.getCpf());
            ps.setString(5, func.getEndereco());
            ps.setString(6, func.getCidade());
            ps.setString(7, func.getBairro());
            ps.setString(8, func.getTelefone());
            ps.setString(9, func.getEmail());
            ps.setString( 10, func.getSenha());
            ps.setInt(11, func.getCargo());
            ps.setInt(12, func.getPerfil());
            ps.execute();
        }catch(Exception e){
            throw new Exception("FuncionarioDAO: "+e.getMessage());
        }finally{
            FabricaConexao.fechaConexao();
        }
    }

    public ArrayList<Funcionario> consultarTodosFuncionarios()
    {
        ArrayList<Funcionario> funcionario = new ArrayList<Funcionario>();
        Funcionario func = null;
        try
        {
            String consultaFuncionarios = "SELECT * FROM TBFuncionarios where nome not like '%Administrador%' order by nome asc";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(consultaFuncionarios);
            ResultSet resultado = ps.executeQuery();
            while(resultado.next())
            {
                int codigo = resultado.getInt(1);
                String nome = resultado.getString(2);
                func = new Funcionario(codigo, nome);
                funcionario.add(func);
            }
        } 
        catch (Exception e)
        {

        }
        finally
        {
            FabricaConexao.fechaConexao();
            return funcionario;
        }
    }

    public Funcionario consultarFuncionario(int matr) throws Exception{
        Funcionario func = null;
        try{
            String consulta = "SELECT * FROM TBFuncionarios WHERE matricula = ?";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(consulta);
            ps.setInt(1, matr);
            ResultSet resultado = ps.executeQuery();
             if (resultado.next()){
               String nome = resultado.getString(2);
               Date data = resultado.getDate(3);
               String rg = resultado.getString(4);
               String cpf = resultado.getString(5);
               String endereco = resultado.getString(6);
               String cidade = resultado.getString(7);
               String bairro = resultado.getString(8);
               String telefone = resultado.getString(9);
               String email = resultado.getString(10);
               String senha = resultado.getString(11);
               int cargo = resultado.getInt(12);
               int perfil = resultado.getInt(13);
               func = new Funcionario(matr, nome, data, rg, cpf, endereco, cidade, bairro, telefone, email, senha, cargo, perfil);
            }else{
                throw new Exception("FuncioanrioDAO: Aluno não encontrado!");
            }
        }catch(Exception e){
            throw new Exception("FuncionarioDAO:"+e.getMessage());
        }finally{
            FabricaConexao.fechaConexao();
            return func;
        }
    }

    public void alterarFuncionario(Funcionario func) throws Exception{
        try {
            String altera = "UPDATE TBFuncionarios SET nome = ?, data_nascimento = ?, rg = ?, cpf = ?, endereco = ?, cidade = ?, bairro = ?, telefone = ?, email = ?, senha = ?, cod_cargo = ?, cod_perfil = ? WHERE matricula = ?";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(altera);
            
            ps.setString(1, func.getNome());
            ps.setDate(2,(Date) func.getDataNascimento());
            ps.setString(3, func.getRg());
            ps.setString(4, func.getCpf());
            ps.setString(5, func.getEndereco());
            ps.setString(6, func.getCidade());
            ps.setString(7, func.getBairro());
            ps.setString(8, func.getTelefone());
            ps.setString(9, func.getEmail());
            ps.setString(10, func.getSenha());
            ps.setInt(11, func.getCargo());
            ps.setInt(12, func.getPerfil());
            ps.setInt(13, func.getMatricula());
            ps.execute();
        } catch (SQLException e) {
            throw new Exception("FuncionarioDAO: "+e.getMessage());
        }finally{
            FabricaConexao.fechaConexao();
        }
    }

    public void excluirFuncionario(int matr) throws Exception{
        try {
            String exclui = "DELETE FROM TBFuncionarios WHERE matricula = ?";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(exclui);
            ps.setInt(1, matr);
            ps.execute();
        } catch (SQLException e) {
            throw new Exception("FuncionarioDAO: "+e.getMessage());
        }finally{
            FabricaConexao.fechaConexao();
        }
    }

    public ArrayList<Perfil> alimentarPerfis(){
        ArrayList<Perfil> perfil = new ArrayList<Perfil>();
        Perfil perf = null;
        try {
            String consultaPerfis = "SELECT * FROM TBPerfis";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(consultaPerfis);
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                int codigo = resultado.getInt(1);
                String nome = resultado.getString(2);
                perf = new Perfil(codigo, nome);
                perfil.add(perf);
            }
        } catch (Exception e) {

        }finally{
            FabricaConexao.fechaConexao();
            return perfil;
        }
    }

    public ArrayList<Cargo> alimentarCargos(){
        ArrayList<Cargo> cargo = new ArrayList<Cargo>();
        Cargo carg;
        try {
            String consultaCargos = "SELECT * FROM TBCargos";
            Connection con = FabricaConexao.abreConexao();
            PreparedStatement ps = con.prepareStatement(consultaCargos);
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                int codigo = resultado.getInt(1);
                String descricao = resultado.getString(2);
                carg = new Cargo(codigo, descricao);
                cargo.add(carg);
            }
        } catch (Exception e) {

        }finally{
            FabricaConexao.fechaConexao();
            return cargo;
        }
    }
}
